/**
 * 返回两个集合的并集
 */
export function setUnion(thisSet, otherSet) {
  // 初始化一个新集合，用于表示并集。
  const unionSet = new Set()
  // 将当前集合转换为数组，并依次添加进unionSet
  let values = Array.from(thisSet)
  for (let i = 0; i < values.length; i++) {
    unionSet.add(values[i])
  }

  // 将其它集合转换为数组，依次添加进unionSet。
  // 循环中的add方法保证了不会有重复元素的出现
  values = Array.from(otherSet)
  for (let i = 0; i < values.length; i++) {
    unionSet.add(values[i])
  }

  return unionSet
}
/**
 * 返回两个集合的交集
 */
export function setIntersection(thisSet, otherSet) {
  // 初始化一个新集合，用于表示交集。
  const interSectionSet = new Set()
  // 将当前集合转换为数组
  const values = Array.from(thisSet)
  // 遍历数组，如果另外一个集合也有该元素，则interSectionSet加入该元素。
  for (let i = 0; i < values.length; i++) {
    if (otherSet.has(values[i])) {
      interSectionSet.add(values[i])
    }
  }

  return interSectionSet
}
/**
 * 返回两个集合的差集
 */
export function setDifference(thisSet, otherSet) {
  // 初始化一个新集合，用于表示差集。
  const differenceSet = new Set()
  // 将当前集合转换为数组
  const values = Array.from(thisSet)
  // 遍历数组，如果另外一个集合没有该元素，则differenceSet加入该元素。
  for (let i = 0; i < values.length; i++) {
    if (!otherSet.has(values[i])) {
      differenceSet.add(values[i])
    }
  }
  return differenceSet
}
